package managers;

import java.sql.SQLException;
import java.util.LinkedList;

import dataBase.QueryDB;
import dataProviders.BadanieDataProvider;
import dataProviders.NormaDataProvider;
import dataProviders.PatientsDataProvider;
import dataProviders.SamplesDataProvider;
import dataProviders.UsersDataProvider;
import entities.*;

public class ResultsManager 
{
	static QueryDB db = new QueryDB();
	private int[] wybraneBadania;
	int IDPracownika;
	LinkedList<Badanie> listaDostepnychBadan;
	
	public ResultsManager()
	{
		listaDostepnychBadan = BadanieDataProvider.getDoOdbioruBadania();
	}
	public ResultsManager(int id, boolean czyFirma)
	{
		listaDostepnychBadan = BadanieDataProvider.getListaZweryfikowanychBadanKontrahenta(id,czyFirma);
	}
	public void resetList()
	{
		this.listaDostepnychBadan = BadanieDataProvider.getDoOdbioruBadania();
	}
	public String[][] pobierzListeDostepnychBadanDoTabeli() 
	{
		String[][] wynik = new String[listaDostepnychBadan.size()][7];
		for(int i=0;i<wynik.length;i++)
			{
			wynik[i][0]=""+listaDostepnychBadan.get(i).getBadanieID();
			wynik[i][1]=SamplesDataProvider.getContractorName(listaDostepnychBadan.get(i).getProbkaID());
			wynik[i][2]=""+listaDostepnychBadan.get(i).getProbkaID();
			wynik[i][3]=SamplesDataProvider.getNameOfSampleType(listaDostepnychBadan.get(i).getProbkaID());
			wynik[i][4]=BadanieDataProvider.pobierzNazweTypuBadania(listaDostepnychBadan.get(i).getTypBadanID());
			wynik[i][5]=""+listaDostepnychBadan.get(i).getWyniki();
			wynik[i][6]=""+listaDostepnychBadan.get(i).getDataWeryfikacji();
			}
		return wynik;
		
		/*
		String[][] wynik = new String[listaDostepnychBadan.size()][5];
		for(int i=0;i<wynik.length;i++)
			{
			wynik[i][0]=""+listaDostepnychBadan.get(i).getBadanieID();
			wynik[i][1]=""+listaDostepnychBadan.get(i).getProbkaID();
			wynik[i][2]=SamplesDataProvider.getNameOfSampleType(listaDostepnychBadan.get(i).getProbkaID());
			wynik[i][3]=""+listaDostepnychBadan.get(i).getPriorytet();
			wynik[i][4]=BadanieDataProvider.pobierzNazweTypuBadania(listaDostepnychBadan.get(i).getTypBadanID());
			}
		return wynik;
		*/
		
	}
	public void setWybraneBadania(int[] selectedRows) {
		wybraneBadania=selectedRows;
		
	}
	public Object[][] pobierzListeWybranychBadanDoTabeli() {
		Object[][] wynik = new String[wybraneBadania.length][5];
		Badanie wybraneBadanie=null;
		for(int i=0;i<wynik.length;i++)
			{
			wybraneBadanie=listaDostepnychBadan.get(wybraneBadania[i]);
			wynik[i][0]=""+wybraneBadanie.getProbkaID();

			wynik[i][1]=SamplesDataProvider.getNameOfSampleType(wybraneBadanie.getProbkaID());
			wynik[i][2]=BadanieDataProvider.pobierzNazweTypuBadania(wybraneBadanie.getTypBadanID());
			wynik[i][3]=wybraneBadanie.getWyniki();
			wynik[i][4]=NormaDataProvider.pobierzNorme(wybraneBadanie.getTypBadanID(),PatientsDataProvider.wiekPacjenta(wybraneBadanie.getProbkaID()));
//			wynik[i][5]=null;
			}
		return wynik;
	}
	public void weryfikujWyniki(int i) {
		Badanie badanie = listaDostepnychBadan.get(wybraneBadania[i]);
		String sql = "UPDATE Badania SET "+
					"dataWeryfikacji = getdate(),"+
					" magisterID = "+UsersDataProvider.getLoggedUser().getId()+" WHERE badanieID = "+badanie.getBadanieID();
		//System.out.println(sql);
		try {
			db.dbSqlUpdate(sql);
			db.dbCommit();
		} catch (SQLException e) {
			
			e.printStackTrace();
		}		
	}
	public Object[][] pobierzListeBadanWybranegoKontrahentaDoTabeli() {
		Object[][] wynik = new String[wybraneBadania.length][5];
		Badanie wybraneBadanie=null;
		for(int i=0;i<wynik.length;i++)
			{
			wybraneBadanie=listaDostepnychBadan.get(wybraneBadania[i]);
			wynik[i][0]=""+wybraneBadanie.getProbkaID();

			wynik[i][1]=SamplesDataProvider.getNameOfSampleType(wybraneBadanie.getProbkaID());
			wynik[i][2]=BadanieDataProvider.pobierzNazweTypuBadania(wybraneBadanie.getTypBadanID());
			wynik[i][3]=wybraneBadanie.getWyniki();
			wynik[i][4]=NormaDataProvider.pobierzNorme(wybraneBadanie.getTypBadanID(),PatientsDataProvider.wiekPacjenta(wybraneBadanie.getProbkaID()));
//			wynik[i][5]=null;
			}
		return wynik;
	}
	public void odznaczOdebraneBadania(java.util.Vector<Object> listaIdBadan) 
	{
		String sql;
		for(int x = 0 ; x < listaIdBadan.size() ; x++)
		{
			sql = "UPDATE Badania SET "+
			"dataOdbioru = getdate()"+
			" WHERE badanieID = '"+(Integer)listaIdBadan.get(x)+"'";
			//System.out.println(sql);
			try {
				db.dbSqlUpdate(sql);
				db.dbCommit();
			} catch (SQLException e) {				
				e.printStackTrace();
			}			
		}	
	}
	
}
